﻿using System.Drawing;
using System.Windows.Forms;

namespace Common {
    // 游戏区域
    class GameBoard: Panel {
        private readonly Image mBitmap; // 后台缓冲位图

        /**
         * 构造方法。
         * @param parent    父窗口
         * @param x, y      左上角坐标
         * @param width     宽度
         * @param height    高度
         */
        public GameBoard(ControlCollection parent, int x, int y, int width, int height) {
            // 初始化成员
            mBitmap = new Bitmap(width, height);

            // 设置双缓冲，使绘制不闪烁
            base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);    // 不擦除背景
            base.SetStyle(ControlStyles.UserPaint, true);               // 使用自定义重绘
            base.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);   // 双缓冲

            // 设置位置和尺寸
            Bounds = new Rectangle(x, y, width, height);

            // 添加到父窗口上
            parent.Add(this);
        }

        /**
         * 获取绘图者。
         */
        public Graphics Drawer {
            get {
                return Graphics.FromImage(mBitmap);
            }
        }

        /**
         * 重绘事件的响应方法。
         * @param e 事件相关信息
         */
        protected override void OnPaint(PaintEventArgs e) {
            e.Graphics.DrawImage(mBitmap, 0, 0);
        }
    }
}
